package com.emmmya.harinCheck.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * @author Harin
 * 前端的字段校验
 */
@Retention(RUNTIME)
@Target(ElementType.FIELD)
public @interface Check {

    /**
     * 前端属性名称,与属性名一致
     */
    String name();

    /**
     * 别名
     * @return
     */
    String[] alias() default {};

    /**
     * 枚举取值
     */
    Class<?> enumValues() default Check.class;

    /**
     * 是否作为ui的字段
     */
    boolean ui() default false;

    /**
     * 是否必填,不能为null，如果是String，还不能为空串
     */
    boolean required() default false;

    /**
     * 默认值
     */
    String defaultValue() default "";

    /**
     * 最小长度 用于字符串
     * @return
     */
    int minLength() default -1;

    /**
     * 最大长度 用于字符串
     * @return
     */
    int maxLength() default -1;

    /**
     * 最小值 用于数字类型
     */
    String minValue() default "";
    /**
     * 最大值  用于数字类型
     */
    String maxValue() default "";

    /**
     * 必须比该某个值大，传入@check的name属性值，不存在时，直接忽略
     */
    String bigger() default "";

    /**
     * 比必须该某个值小，传入@check的name属性值，不存在时，直接忽略
     */
    String small() default "";

    /**
     * 前端的描述信息
     */
    String desc() default "";

    /**
     * 正则表达式
     */
    String pattern() default "";

    /**
     * 校验出错时，提示的错误信息，为空则不使用。
     */
    String errorMsg() default "";

}
